home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / win / rtfhelp.zip / RTFHCP85.C < prev    next >
Text File  |  1994-11-06  |  5KB  |  99 lines

  1. /*
  2. ======================================================================
  3.    RTFHelp Windows Help Generation Tool
  4.    (C) Copyright 1994 by J. Hlavaty
  5.  
  6.    RTFHCP85.c
  7.    CP850 to ANSI conversion
  8. ======================================================================
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include "rtfhelp.h"
  15.  
  16. UCHAR CP850[256] = { // 0    1    2    3    4    5    6    7    8    9
  17.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  00
  18.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  10
  19.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  20
  20.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  30
  21.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  40
  22.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  50
  23.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  60
  24.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  70
  25.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  80
  26.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, //  90
  27.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 100
  28.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 110
  29. //                                                          C,   u"         *
  30.                       0,   0,   0,   0,   0,   0,   0,   0, 199, 252, // 120
  31. //------------------- 0    1    2    3    4    5    6    7    8    9 -----------
  32. //                  e'   a^   a"   a\   ao   c,   e^   e"   e\   i"         *
  33.                     233, 226, 228, 224, 229, 231, 234, 235, 232, 239, // 130
  34.                  // BUG WARNING:  I'm using '\' as the 'grave accent' marker
  35.                  //   This is also the C continuation character and caused ten
  36.                  //   characters of our table to disappear if it was the last
  37.                  //   character on a line!
  38. //                  i^   i\   A"   Ao   E'   ae   AE   o^   o"   o\         *
  39.                     238, 236, 196, 197, 201, 230, 198, 244, 246, 242, // 140
  40. //                  u^   u\   y"   O"   U"   cnt  lb   yen    -    -        *
  41.                     251, 249, 255, 214, 220, 162, 163, 165,   0,   0, // 150
  42. //                  a'   i'   o'   u'   n~   N~   a_   o_   (?)    -        *
  43.                     225, 237, 243, 250, 241, 209, 170, 186, 191, 173, // 160
  44. //                  not  1/2  1/4  (!)  <<   >>                             *
  45.                     172, 189, 188, 161, 171, 187,   0,   0,   0,   0, // 170
  46.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 180
  47.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 190
  48.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 200
  49.                       0,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 210
  50. //                                          (sz)      (par)                 *
  51.                       0,   0,   0,   0,   0, 223, 182,   0,   0,   0, // 220
  52. //                  (m)                                                     *
  53.                     181,   0,   0,   0,   0,   0,   0,   0,   0,   0, // 230
  54. //                       +-                                sup. 0           *
  55.                       0, 177,   0,   0,   0,   0,   0,   0, 176,   0, // 240
  56. //                              sup. 2  uml.                                *
  57.                       0,   0,   0, 252, 168,   0,                    // 250
  58.                       } ;
  59.  
  60. int TranslateCPToANSI( int cp, char *str )
  61. {
  62.   UCHAR ANSIcodepoint = 0 ;
  63.   UCHAR offset = 0 ;
  64.  
  65.   while ( *str )
  66.   {
  67.     switch( cp )
  68.     {
  69.       case 850:
  70.         if ( 0 == CP850[*str] ) // if table entry is '0', don't change the original
  71.            ;
  72.         else
  73.         {
  74.            offset = *str ;                 // get the current character
  75.            ANSIcodepoint = CP850[offset] ; // use codepoint as index into table
  76.  
  77.            // NOTE:  if the ANSI table above doesn't contain the given codepoint,
  78.            //   then we are to leave it alone
  79.            if ( ANSIcodepoint ) // if we have a replacement character replace it
  80.               *str = ANSIcodepoint ;
  81.         }
  82.         break;
  83.       case 0:
  84.         // we have no code page or are looping through the first line of an
  85.         //   unsupported codepage...
  86.         break;
  87.       default:
  88.         codepage = 0 ;
  89.         printf("RTFHELP:  unsupported codepage '%d'\n", cp) ;
  90.         return FALSE ;
  91.     }
  92.  
  93.     str++ ;
  94.   }
  95.  
  96.   return TRUE ;
  97. }
  98.  
  99.